1 銘柄選定のプロセス

リターンによる絞り込み(長期で見て右肩下がりなものを外す) ↓ 日足がついた日数・取引量で絞り込み ↓ 分散が7%以下のものをフィルタ ↓ 相関が低い組み合わせの抽出 #計算時間が長いのでカット中

1.1 前処理

1.2 対象ticker

  # ticker1 <- c(kaigai, kokunai)
  # length(ticker1)
  # rtnt=data.frame(ticker=ticker1)

1.3 対象データ

kaigaiETF_daily0 <- fread('C:\\tmp\\data\\ETF\\kaigaiETF\\kaigaiETF_daily.csv')
kaigaiETF_daily0$date <- as.Date(kaigaiETF_daily0$date)
kokunaiETF_daily0 <- fread('c:\\tmp\\data\\ETF\\kokunaiETF\\kokunaiETF_daily.csv')
kokunaiETF_daily0$date <- as.Date(kokunaiETF_daily0$date)

1.4 リターン計算

# 
#   #daily計算
#     b00 <- daily %>%
#     group_by(ticker) %>%
#     mutate(rtn=(close-lag(close))/lag(close))
#     #異常値の除去
#     b00$rtn[is.na(b00$rtn)] <- 0
#     b00$rtn[b00$rtn > 0.5] <- 0
#     b00$rtn[b00$rtn < -0.5] <- 0
#     #group_by(ticker, month(b00$date))でエラーになるのでdata.frameにしておく
#     b00 <- data.frame(b00)
#     write.table(b00,"dailyrtn.txt",sep="\t",quote=T,row.names=F)
# 
#   #monthly計算
#     b02 <- b00 %>%
#       group_by(ticker, year(b00$date), month(b00$date)) %>%
#       summarise( return_monthly = prod(rtn+1)-1 )
# 
#     #異常値の除去
#     b02$return_monthly[is.na(b00$return_monthly)] <- 0
#     b02$return_monthly[b00$return_monthly > 0.5] <- 0
#     b02$return_monthly[b00$return_monthly < -0.5] <- 0
#     #group_by(ticker, month(b00$date))でエラーになるのでdata.frameにしておく
#     b02 <- data.frame(b02)
#     write.table(b02,"monthlyrtn.txt",sep="\t",quote=T,row.names=F)
#     
#   #直近●●日リターン計算の関数
#     myrtn <- function(x) {
#       d01 <- b00 %>%
#         dplyr::select(date,ticker) %>%
#         group_by(ticker) %>%
#         do(tail(.,n=x)) %>%
#         do(head(.,n=1)) %>%
#         mutate(rtn=0)
#       d01
#       
#       d02 <- b00 %>%
#         dplyr::select(date,ticker,rtn) %>%
#         group_by(ticker) %>%
#         do(tail(.,n=x-1))
#       d02
#       
#       d03 <- rbind(d01,d02)
#       d03 <- d03[order(d03$ticker,d03$date),,]
#       d03
#       
#       d04 <- d03 %>%
#         group_by(ticker) %>%
#         mutate(rtn1=rtn+1) %>%
#         summarise(rtn = prod(rtn1)-1 ) 
#       d04 <- data.frame(d04)
#       d04[ ,1] <- as.factor(d04[ ,1])
#       colnames(d04) <- c("ticker",paste("return",x,"days_last",sep="_"))
#       return(d04)
#     }
# 
#   #直近●●日リターン計算
#     for ( i in 1:length(period)){
#       d05 <- myrtn(period[i])
#       rtnt <- merge(rtnt,d05,by=c("ticker"))
#     }
# 
#   # #return_month_last
#   #   b01 <- b00 %>%
#   #     group_by(ticker) %>%
#   #     do(tail(., n=20)) %>%
#   #     summarise( return_month_last = prod(rtn+1)-1 ) 
#   # #return_quarter_last
#   #   b02 <- b00 %>%
#   #     group_by(ticker) %>%
#   #     do(tail(., n=60)) %>%
#   #     summarise( return_quarter_last = prod(rtn+1)-1 ) 
#   # #return_year_last
#   #   b03 <- b00 %>%
#   #     group_by(ticker) %>%
#   #     do(tail(., n=240)) %>%
#   #     summarise( return_year_last = prod(rtn+1)-1 ) 
#   # #return_3year_last
#   #   b04 <- b00 %>%
#   #     group_by(ticker) %>%
#   #     do(tail(., n=720)) %>%
#   #     summarise( return_3year_last = prod(rtn+1)-1 ) 
#   # #return_1month_last
#   #   b05 <- b00 %>%
#   #     group_by(ticker) %>%
#   #     do(tail(., n=1020)) %>%
#   #     summarise( return_5year_last = prod(rtn+1)-1 ) 
#   #return_monthly_mean
#     b06 <- b00 %>%
#       group_by(ticker, year(b00$date), month(b00$date)) %>%
#       summarise( return_monthly = prod(rtn+1)-1 ) %>%
#       ungroup() %>%
#       group_by(ticker) %>%
#       summarise( return_monthly_mean = mean(return_monthly))
#   #return_yearly_mean
#     b07 <- b00 %>%
#       group_by(ticker, year=year(b00$date)) %>%
#       summarise( return_yearly = prod(rtn+1)-1 ) %>%
#       summarise( return_yearly_mean = mean(return_yearly))
# 
# #歪度・尖度計算
#   #skewness_month_last
#     a05 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=20)) %>%
#       summarise( skewness_month_last = round(skewness(rtn), digits=2) )
#   
#   #skewness_quarter_last
#     a06 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=60)) %>%
#       summarise( skewness_quarter_last = round(skewness(rtn), digits=2) )
#   
#   #skewness_year_last
#     a07 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=200)) %>%
#       summarise( skewness_year_last = round(skewness(rtn), digits=2) )
#   
#   #skewness_3year_last
#     a08 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=600)) %>%
#       summarise( skewness_3year_last = round(skewness(rtn), digits=2) )
#     
#   #skewness_5year_last
#     a09 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=1000)) %>%
#       summarise( skewness_5year_last = round(skewness(rtn), digits=2) )
#     
#   #skewness_monthly_mean
#     a10 <- b00 %>%
#       group_by(ticker, year=year(b00$date), month=month(b00$date)) %>%
#       summarise( skewness_monthly = round(skewness(rtn), digits=2) ) %>%
#       ungroup() %>%
#       group_by(ticker) %>%
#       summarise( skewness_monthly_mean = mean(skewness_monthly))
#   
#   #skewness_yearly_mean
#     a11 <- b00 %>%
#       group_by(ticker, year=year(b00$date)) %>%
#       summarise( skewness_yearly = round(skewness(rtn), digits=2) ) %>%
#       summarise( skewness_yearly_mean = mean(skewness_yearly))
#   
#   #kurtosis_month_last
#     a12 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=20)) %>%
#       summarise( kurtosis_month_last = round(kurtosis(rtn), digits=2) )
#     
#   #kurtosis_quarter_last
#     a13 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=60)) %>%
#       summarise( kurtosis_quarter_last = round(kurtosis(rtn), digits=2) )
#   
#   #kurtosis_year_last
#     a14 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=200)) %>%
#       summarise( kurtosis_year_last = round(kurtosis(rtn), digits=2) )
#   
#   #kurtosis_3year_last
#     a15 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=600)) %>%
#       summarise( kurtosis_3year_last = round(kurtosis(rtn), digits=2) )
#     
#   #kurtosis_5year_last
#     a16 <- b00 %>%
#       group_by(ticker) %>%
#       do(tail(., n=1000)) %>%
#       summarise( kurtosis_5year_last = round(kurtosis(rtn), digits=2) )
#     
#   #kurtosis_monthly_mean
#     a17 <- b00 %>%
#       group_by(ticker, year=year(b00$date), month=month(b00$date)) %>%
#       summarise( kurtosis_monthly = round(kurtosis(rtn), digits=2) ) %>%
#       ungroup() %>%
#       group_by(ticker) %>%
#       summarise( kurtosis_monthly_mean = mean(kurtosis_monthly))
#   
#   #kurtosis_yearly_mean
#     a18 <- b00 %>%
#       group_by(ticker, year=year(b00$date)) %>%
#       summarise( kurtosis_yearly = round(kurtosis(rtn), digits=2) ) %>%
#       summarise( kurtosis_yearly_mean = mean(kurtosis_yearly))
#     
#   #merge
#     rtnt <- merge(rtnt, b06, all=T)
#     rtnt <- merge(rtnt, b07, all=T)
#     rtnt <- merge(rtnt, a05, all=T)
#     rtnt <- merge(rtnt, a06, all=T)
#     rtnt <- merge(rtnt, a07, all=T)
#     rtnt <- merge(rtnt, a08, all=T)
#     rtnt <- merge(rtnt, a09, all=T)
#     rtnt <- merge(rtnt, a10, all=T)
#     rtnt <- merge(rtnt, a11, all=T)
#     rtnt <- merge(rtnt, a12, all=T)
#     rtnt <- merge(rtnt, a13, all=T)
#     rtnt <- merge(rtnt, a14, all=T)
#     rtnt <- merge(rtnt, a15, all=T)
#     rtnt <- merge(rtnt, a16, all=T)
#     rtnt <- merge(rtnt, a17, all=T)
#     rtnt <- merge(rtnt, a18, all=T)
#     rtnt[,2:ncol(rtnt)] <- round(rtnt[,2:ncol(rtnt)],digits=3)
#     write.table(rtnt,"rtnt.txt",sep="\t",quote=T,row.names = F)
#     rtnt1 <- rtnt %>%
#       dplyr::filter(return_240_days_last > 0 &
#              return_720_days_last > 0 &
#              return_1020_days_last > 0 &
#              return_yearly_mean > 0 )
#     ticker1 <- as.character(rtnt1$ticker)
#     length(ticker1)
#     ticker1

2 国内ETF

2.1 日足がついた日数・取引量で絞り込み

a01 <- kokunaiETF_daily0 %>%
  dplyr::filter(year(date) >= "2013", year(date) <= "2019", 
                ticker %in% kokunaiETF) %>%
  dplyr::group_by(year(date),month(date),ticker) %>%
  summarise(days=n(),volume=mean(volume,na.rm=T)) %>%
  ungroup() %>%
  dplyr::group_by(ticker) %>%
  summarise(days=mean(days,na.rm=T),volume=mean(volume,na.rm=T))

#日足がついた日数の分布を見てみる
  summary(a01[,2])
      days      
 Min.   :13.00  
 1st Qu.:20.46  
 Median :20.81  
 Mean   :21.30  
 3rd Qu.:22.96  
 Max.   :23.44  
  hist(a01[,2])

  #ばらけてなければフィルタ不要
  #20日以下はフィルタしてみる
  a01 <- a01 %>%
    filter(days >= 20)

#取引量の分布を見てみる
  summary(a01[,3])
     volume        
 Min.   :       7  
 1st Qu.:     746  
 Median :    2580  
 Mean   :  142710  
 3rd Qu.:    8466  
 Max.   :12575989  
  hist(a01[,3])

  #何の根拠も無いが中央値以下はフィルタする
    a01 <- a01 %>%
      # dplyr::filter(volume > median(volume))
      dplyr::filter(volume > quantile(volume, c(0.02275)))

datatable(a01,
          filter = 'top', 
          style = 'bootstrap', class = 'table-bordered table-condensed',
          extensions = 'ColReorder',
          options = list(dom = 'Rlfrtip')
          )
#tickerの抽出
  ticker_filtered_kokunai <- as.character(c(t(a01[,1])))
  length(ticker_filtered_kokunai)
[1] 250
  ticker_filtered_kokunai
  [1] "1305" "1306" "1308" "1309" "1311" "1312" "1313" "1319" "1320" "1321"
 [11] "1322" "1323" "1324" "1325" "1326" "1327" "1328" "1329" "1330" "1343"
 [21] "1344" "1345" "1346" "1348" "1349" "1356" "1357" "1358" "1360" "1364"
 [31] "1365" "1366" "1367" "1368" "1369" "1385" "1386" "1390" "1391" "1392"
 [41] "1397" "1398" "1399" "1456" "1457" "1458" "1459" "1464" "1465" "1466"
 [51] "1467" "1469" "1470" "1472" "1475" "1476" "1477" "1478" "1479" "1480"
 [61] "1481" "1482" "1483" "1484" "1486" "1487" "1488" "1489" "1490" "1492"
 [71] "1493" "1494" "1495" "1496" "1497" "1498" "1499" "1540" "1541" "1542"
 [81] "1543" "1545" "1546" "1547" "1550" "1551" "1552" "1554" "1555" "1557"
 [91] "1559" "1560" "1563" "1566" "1568" "1569" "1570" "1571" "1572" "1573"
[101] "1575" "1576" "1577" "1578" "1579" "1580" "1584" "1586" "1591" "1592"
[111] "1593" "1595" "1597" "1599" "1613" "1615" "1617" "1618" "1619" "1621"
[121] "1622" "1623" "1625" "1626" "1627" "1629" "1630" "1631" "1632" "1633"
[131] "1651" "1652" "1653" "1654" "1655" "1656" "1657" "1658" "1659" "1660"
[141] "1670" "1671" "1672" "1677" "1678" "1679" "1680" "1681" "1682" "1683"
[151] "1688" "1689" "1690" "1695" "1696" "1698" "1699" "2031" "2032" "2034"
[161] "2035" "2036" "2037" "2038" "2039" "2040" "2041" "2042" "2043" "2044"
[171] "2045" "2046" "2048" "2067" "2068" "2510" "2511" "2512" "2513" "2514"
[181] "2515" "2516" "2517" "2518" "2519" "2520" "2524" "2525" "2526" "2527"
[191] "3226" "3227" "3234" "3249" "3269" "3278" "3279" "3281" "3282" "3283"
[201] "3287" "3290" "3292" "3295" "3296" "3298" "3308" "3309" "3451" "3453"
[211] "3455" "3459" "3462" "3463" "3466" "3468" "3470" "3471" "3472" "3473"
[221] "3476" "3478" "3481" "3487" "3488" "3493" "8951" "8952" "8953" "8954"
[231] "8955" "8956" "8957" "8958" "8960" "8961" "8963" "8964" "8966" "8967"
[241] "8968" "8972" "8975" "8976" "8977" "8979" "8984" "8985" "8986" "8987"

2.2 現在値x売買単位が10000を超えるものはフィルタする

買い増しが難しいため

kokunaiETF_list <- fread('C:\\tmp\\data\\ETF\\kokunaiETF\\etf_etn_REIT_all.csv')
kokunaiETF_list$ticker <- as.factor(kokunaiETF_list$ticker)
kokunaiETF_list$name <- as.character(kokunaiETF_list$name)
kokunaiETF_list$Trading_unit <- as.numeric(kokunaiETF_list$Trading_unit)

tmp <- daily1 %>%
  filter(ticker %in% kokunaiETF_list$ticker) %>%
  group_by(ticker) %>%
  do(tail(.,1))

kokunaiETF_list <- merge(kokunaiETF_list, tmp, by='ticker')
rm(tmp)
kokunaiETF_list <- kokunaiETF_list %>%
  mutate(unit_close = Trading_unit * close) %>%
  filter(unit_close < 10000)
tmp <- as.character(kokunaiETF_list$ticker)
ticker_filtered_kokunai <- intersect(ticker_filtered_kokunai, tmp)

3 海外ETF

3.1 日足がついた日数・取引量で絞り込み

#日足がついた日数・取引量を集計
  a01 <- kaigaiETF_daily0 %>%
    dplyr::filter(year(date) >= "2013", year(date) < "2017", 
                  ticker %in% kaigai) %>%
    dplyr::group_by(year(date),month(date),ticker) %>%
    summarise(days=n(),volume=mean(volume,na.rm=T)) %>%
    ungroup() %>%
    dplyr::group_by(ticker) %>%
    summarise(days=mean(days,na.rm=T),volume=mean(volume,na.rm=T))

#日足がついた日数の分布を見てみる
  summary(a01[,2])
      days      
 Min.   :18.50  
 1st Qu.:21.00  
 Median :21.00  
 Mean   :20.84  
 3rd Qu.:21.00  
 Max.   :21.44  
  #ばらけてなければフィルタ不要

#取引量の分布を見てみる
  summary(a01[,3])
     volume         
 Min.   :       73  
 1st Qu.:    36121  
 Median :   184564  
 Mean   :  3331874  
 3rd Qu.:  1142152  
 Max.   :152074575  
  hist(a01[,3])

  #何の根拠も無いが中央値以下はフィルタする
    a01 <- a01 %>%
      dplyr::filter(volume > median(volume))

datatable(a01)
#tickerの抽出
  ticker_filtered_kaigai <- as.character(c(t(a01[,1])))
  length(ticker_filtered_kaigai)
[1] 147
  ticker_filtered_kaigai
  [1] "2800.HK" "2801.HK" "2823.HK" "2827.HK" "2828.HK" "2836.HK" "3049.HK"
  [8] "ACWI"    "AGG"     "BIV"     "BLV"     "BND"     "BNDX"    "BSV"    
 [15] "CHAU"    "CIU"     "CSJ"     "CURE"    "CWB"     "DBA"     "DBC"    
 [22] "DEM"     "DFE"     "DIA"     "DRN"     "DUST"    "DVY"     "DXJ"    
 [29] "EDC"     "EDZ"     "EEM"     "EFA"     "EIDO"    "ELD"     "EMB"    
 [36] "EMLC"    "EPHE"    "EPI"     "EPOL"    "EPP"     "ERUS"    "EWG"    
 [43] "EWJ"     "EWM"     "EWS"     "EWT"     "EWW"     "EWY"     "EWZ"    
 [50] "EZA"     "FAS"     "FAZ"     "FM"      "FXI"     "GDX"     "GDXJ"   
 [57] "GLD"     "GSG"     "HACK"    "HDV"     "HEDJ"    "HEWG"    "HEWJ"   
 [64] "HEZU"    "HYG"     "IAU"     "IBB"     "IEF"     "IEMG"    "IEV"    
 [71] "IFGL"    "IJH"     "IJR"     "ILF"     "IVV"     "IWM"     "IXC"    
 [78] "IYR"     "JNK"     "LABD"    "LABU"    "LQD"     "MBB"     "MOO"    
 [85] "NUGT"    "OEF"     "OIH"     "PFF"     "QQQ"     "RSX"     "RUSL"   
 [92] "RUSS"    "RWR"     "RWX"     "SDY"     "SHV"     "SHY"     "SLV"    
 [99] "SMH"     "SPXL"    "SPXS"    "SPY"     "THD"     "TIP"     "TLT"    
[106] "TMF"     "TMV"     "TNA"     "TUR"     "TZA"     "VB"      "VBR"    
[113] "VCIT"    "VCSH"    "VDE"     "VEA"     "VEU"     "VFH"     "VGK"    
[120] "VGT"     "VHT"     "VIG"     "VMBS"    "VNM"     "VO"      "VOE"    
[127] "VOO"     "VPL"     "VT"      "VTI"     "VTIP"    "VTV"     "VUG"    
[134] "VV"      "VWO"     "VXF"     "VXUS"    "VYM"     "XLB"     "XLE"    
[141] "XLF"     "XLI"     "XLK"     "XLP"     "XLU"     "XLV"     "XLY"    

4 フィルタ済銘柄リストのマージ

# 海外ETFはトレーリングストップができないので一旦外す
# ticker_filtered <- c(ticker_filtered_kokunai,ticker_filtered_kaigai)
ticker_filtered0 <- ticker_filtered_kokunai

5 日経平均ETF系を外す

ticker_filtered1 <- setdiff(ticker_filtered0,
                           c("1465","1468","1471","1466","1469","1472","1464","1467","1470","1474","1591","1592","1593","1593","1599","2526","1492","1492","1493","1346","1369","1397","1578","2525","1456","1571","1580","1459","2035","1458","1570","1579","1489"))

6 最近終値がついてないものをフィルタする

tmp <- daily1 %>%
  filter(ticker %in% ticker_filtered1) %>%
  group_by(ticker) %>%
  do(tail(.,1)) %>%
  filter(date > Sys.Date() - 30)
ticker_filtered2 <- as.character(t(tmp$ticker))
rm(tmp)

7 分散が7%以下のものをフィルタする

7%以上のリターンが見込めないものは外したい

#  filter(ticker=='1305') %>%

tmp <- dailyrtn %>%
  filter(ticker %in% ticker_filtered2) %>%
  group_by(ticker, year(date)) %>%
  summarise(sd = sd(rtn, na.rm=TRUE) * sqrt(250)) %>%
  ungroup() %>%
  group_by(ticker) %>%
  summarise(sd_mean = mean(sd, na.rm=T)) %>%
  filter(sd_mean >= 0.07)
datatable(tmp,
        filter = 'top', 
        style = 'bootstrap', class = 'table-bordered table-condensed',
        extensions = 'ColReorder',
        options = list(dom = 'Rlfrtip')
        )
ticker_filtered3 <- as.character(tmp$ticker)
ticker_filtered3
 [1] "1311" "1327" "1344" "1357" "1366" "1367" "1368" "1385" "1386" "1390"
[11] "1391" "1392" "1457" "1475" "1476" "1477" "1478" "1481" "1482" "1483"
[21] "1496" "1497" "1499" "1540" "1541" "1542" "1559" "1560" "1563" "1575"
[31] "1576" "1584" "1586" "1618" "1623" "1627" "1631" "1632" "1651" "1655"
[41] "1656" "1657" "1658" "1659" "1660" "1671" "1688" "1689" "1690" "1695"
[51] "1696" "1699" "2031" "2032" "2034" "2037" "2038" "2039" "2041" "2042"
[61] "2043" "2046" "2048" "2067" "2068" "2511" "2513" "2514" "2515" "2516"
[71] "2517" "2518" "2519" "2520" "2527"

8 購入済銘柄と相関が高いので外すリスト

9 {r} # ticker_filtered <- setdiff(ticker_filtered, c('1541','2034','2045','LABD','SPXS')) #

10 尖度も歪度も低い銘柄を候補に追加したい

10.1 銘柄絞込

#参考
rtnt[rtnt$ticker=='2049',14] #skewness
numeric(0)
rtnt[rtnt$ticker=='2049',21] #kurtosis
numeric(0)
tmp <- rtnt %>%
  group_by(ticker) %>%
  filter(ticker %in% ticker_filtered3,
         skewness_monthlyreturn < -0.3,
         kurtosis_monthlyreturn < 0.5)
#-0.3とか0.5はなんとなく。。。もう少し考えたいな(宿題)

ggplotly(
  ggplot(subset(monthlyrtn, ticker %in% tmp$ticker),
         aes(x = return_monthly, colour = ticker)
         ) + geom_density()
)
tmp <- as.character(t(tmp$ticker))
ticker_filtered <- union(ticker_filtered3, tmp)

# ticker_wanted <- setdiff(ticker_wanted, kounyu)

10.2 相関を見てみる

f02 <- daily1 %>%
  filter(ticker %in% c(ticker_filtered),
         date >= Sys.Date() - 365)
f02 <- dcast(f02, date ~ ticker, value.var='close')
f02 <- f02[,2:ncol(f02)]
#f02 <- f02[,order(factor(colnames(f02),levels=c(kounyu, ticker_wanted)))]
cor.plot(cor(f02, use='pairwise.complete.obs', method='p'),
         numbers=T)

10.3 上のcorplotから選定したリスト

11 {r} # ticker_wanted <- c('1475','FM','IBB','LABU') # write.table(ticker_wanted,'ticker_wanted.txt') #

12 最終的なフィルタ済銘柄

write(ticker_filtered,'c:\\tmp\\data\\ETF\\ticker_filtered.txt')

12.1 相関が低い組み合わせの抽出

# #データ
# d10 <- fread("dailyrtn.txt")
# d10 <- d10[!duplicated(paste(d10$date,d10$ticker,sep=",")),]
# d10 <- dcast(d10,date ~ ticker,value.var="rtn")
# d10 <- d10 %>%
#   filter(date >= "2016-01-01" & date <= "2016-12-31")
# 
# #output
#   cort <- data.frame(matrix(rep(NA,3),nrow=1))[-1,]
#   colnames(cort) <- c('COR','tickerA','tickerB')
#   
# #tickerの組み合わせ
#   #d00 <- expand.grid('1365',tickerall)
#   d00 <- t(combn(ticker2,2))
# 
# #組み合わせ毎(年毎)の相関の平均
# for (i in 1:nrow(d00)){
#   d01 <- d10 %>%
#     #dplyr::select(date, tickerA=starts_with(d00[i,1]), tickerB=starts_with(d00[i,2])) %>%
#     dplyr::select(date,
#                   matches(paste("^",d00[i,1],"$",sep="")),
#                   matches(paste("^",d00[i,2],"$",sep=""))
#                  ) %>%
#     group_by(yyyy=year(d10$date)) %>%
#     do(cortmp=t(cor(.[,2], .[,3], use="pairwise.complete.obs",method="p"))) %>%
#     ungroup() %>%
#     summarise(COR=mean(as.numeric(cortmp),na.rm = T))
#   names(d01)[1] <- c("COR")
#   d01 <- transform(d01,a=d00[i,1])
#   d01 <- transform(d01,b=d00[i,2])
#   cort <- rbind(cort,d01)
# }
#   
# cort1 <- cort[cort$COR < 0.5 & cort$COR > -0.5,]
# ticker1 <- unique(sort(c(as.character(cort1$a),as.character(cort1$b))))
# 
# ab12 <- graph.data.frame(na.omit(cort1[,2:3]),directed=F)
# #ab13 <- clique_num(ab12)
# ab14 <- largest.cliques(ab12) #爆速 ab14 <- cliques(ab12,min=ab13) は遅い
# length(ab14)
# 
# cliquet = data.frame(x1=names(ab14[[1]]))
# if (length(ab14) != 1){
#   for ( i in 2:length(ab14)){
#     cliquet <- transform(cliquet,tmp=names(ab14[[i]]))
#     names(cliquet)[i] <- paste("x",i,sep="")
#   }
# }
# 
# write.table(cliquet,"cliquet.txt",sep="\t",quote=T,row.names = F)
# datatable(cliquet)
# 
# d02 <- as.xts(read.zoo(d10))
# d02 <- d02[,sort(names(ab14[[1]]))]
# cor1 <- cor(d02,use="pairwise.complete.obs",method="p")
# #qgraph(cor1,edge.labels=T,label.cex=0.1)
# cor.plot(cor1,numbers=T)

12.2 50000/株価の余りを最小化する銘柄の組み合わせ

#cliquet <- read.table("cliquet.txt",sep="\t",header=T)

# sa <- c()
# for (i in 1:ncol(cliquet)){
# tmp <- daily %>%
#   dplyr::filter(ticker %in% as.character(cliquet[,i])) %>%
#   group_by(ticker) %>%
#   do(tail(.,n=1)) %>%
#   mutate(sa = 50000 %% close) %>%
#   ungroup() %>%
#   summarise(sa = sum(sa))
# #sa[i,1] <- tmp
# sa <- c(sa,tmp)
# }

#国内ETF
# sa <- c()
# tmp <- daily %>%
#   group_by(ticker) %>%
#   do(tail(.,n=1))
# 
# tmp1 <- read.table("kokunaiETFlist.txt",sep="\t",header=T)
# tmp1 <- tmp1[,c(1,4)]
# tmp1[,2] <- as.numeric(as.character(tmp1[,2]))
# 
# tmp2 <- merge(tmp,tmp1,by="ticker")
# 
# for (i in 1:ncol(cliquet)){
#   tmp3 <- tmp2 %>%
#     filter(ticker %in% as.character(cliquet[,i])) %>%
#     mutate(sa = 50000 %% (close*unit)) %>%
#     summarise(sa = sum(sa))
#   sa <- c(sa,tmp3)
# }

# which.min(sa)
# sa[which.min(sa)]
# datatable(data.frame(sort(cliquet[,which.min(sa)])))
# ticker4 <- sort(as.character(cliquet[,which.min(sa)]))

12.3 グラフ描画

#data
# data01 <- read.table("monthlyrtn.txt",sep="\t",header=T)
#     data01$return_monthly[is.na(data01$return_monthly)] <- 0
#     data01$return_monthly[data01$return_monthly > 0.5] <- 0
#     data01$return_monthly[data01$return_monthly < -0.5] <- 0
# data02 <- data01 %>%
#   dplyr::filter(ticker %in% ticker4)
# data02 %>%
#   dplyr::group_by(year.b00.date.,month.b00.date.) %>%
#   summarise(n())
# data02 <- transform(data02,
#                   yyyymm=paste(data02$year.b00.date,
#                                formatC(data02$month.b00.date,width=2,flag=0),
#                                sep="-"
#                                )
#                   )
# data <- data02[,c(5,4)]
# #data02[,1] <- as.Date(data02[,1])
# #data <- data02[order(data02[,1],data02[,2]),]
# 
# 
# # den <- tapply(data[,2],
# #               data[,1],
# #               hist,
# #               breaks=seq( -1 * max(max(abs(data[ ,2])),min(abs(data[ ,2]))),
# #                           max(max(abs(data[ ,2])),min(abs(data[ ,2]))),
# #                           0.2
# #                         )
# #              )
# den <- tapply(data[,2],
#               data[,1],
#               hist,
#               breaks=seq( -0.5,
#                           0.5,
#                           0.025
#                         )
#              )
# 
# t00 <- data.frame(yyyymm = den[[1]]$density)
# colnames(t00) <- names(den[1])
# for (i in 2:length(den)){
#   t01 <- data.frame(yyyymm = den[[i]]$density)
#   colnames(t01) <- names(den[i])
#   t00 <- cbind(t00,t01)
# }
# row.names(t00) <- den[[1]]$mids
# 
# t01 <- list(x = colnames(t00),
#             y = row.names(t00),
#             z = as.matrix(t00),
#             type = "surface")
# plot_ly(x = t01$x , y = t01$y , z = t01$z , type = "surface" , showscale=FALSE)
# 
# data01[ ,1] <- as.factor(data01[ ,1])
# g <- ggplot(subset(data01, ticker %in% ticker4), aes(x=return_monthly, colour=ticker))
# g <- g + geom_density()
# ggplotly(g)
# 
# daily[,1] <- as.Date(daily[,1])
# e00 <- daily %>%
#   filter(date > "2013-01-01", ticker %in% ticker4)
# 
# e01 <- e00 %>%
#   group_by(ticker) %>%
#   select(close1=close) %>%
#   do(head(.,n=1))
# 
# e02 <- merge(e00,e01,by="ticker",all=T)
# e02 <- transform(e02, rtn = (e02$close - e02$close1) / e02$close1 + 1)
# e02 <- data.frame(e02)
# e02[ ,1] <- as.factor(e02[ ,1])
# e02[ ,2] <- as.Date(e02[ ,2])
# g <- ggplot(e02, aes(x = date, y = rtn, colour = ticker))
# g <- g + geom_line()
# ggplotly(g)
# 
# datatable(subset(rtnt,ticker %in% ticker4))
    $(function(){
      $("img:not(.lb-image)").wrap(function() {
        return "<a href='" + $(this).attr("src") + "' data-lightbox='" + $(this).attr("scr") + "'></a>";
      });
    });